#include "gd32f30x.h"
#include "stdint.h"
#include "stdio.h"
#include "version.h"

#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "timers.h"

#include "DevicesBeep.h"
#include "DevicesKey.h"
#include "DevicesLed.h"
#include "DevicesQueue.h"
#include "DevicesList.h"
#include "DevicesTime.h"
#include "DevicesUID.h"

#include "taskKey.h"
#include "taskSoftTimer.h"


TimerHandle_t g_xTimersLedHandle = NULL;    /* Led定时刷新定时器 */
TimerHandle_t g_xTimersKeyHandle = NULL;    /* Key定时读取定时器 */
TimerHandle_t g_xTimersBeepHandle = NULL;   /* Beep定时刷新定时器 */


/*
*   函 数 名: vSoftTimerLedCallback
*   功能说明: 定时器led回调函数
*   形    参: 无
*   返 回 值: 无
*/
static void vSoftTimerLedCallback(xTimerHandle pxTimer)
{
    (void)pxTimer;

    vLedMachine();
}

/*
*   函 数 名: vSoftTimerKeyCallback
*   功能说明: 定时器key回调函数
*   形    参: 无
*   返 回 值: 无
*/
static void vSoftTimerKeyCallback(xTimerHandle pxTimer)
{
    (void)pxTimer;

//    /* 有触发了新按键状态 */
//    if(enumKeyStateMachine(&g_typeKeyData) != keyNormal)
//    {
//        /* 把有效的按键数据存入FIFO */
//        enumQueuePushDatas(&g_TypeQueueKeyInput, &g_typeKeyData, sizeof(KeyTypeDef));

//        /* 给出信号量，以启动任务执行解析 */
//        xTaskNotifyGive(g_TaskKeyHand);
//    }
}


/*
*   函 数 名: cSoftTimerInit
*   功能说明: 操作系统软件定时器初始化
*   形    参: 无
*   返 回 值: 错误值
*/
int8_t cSoftTimerInit(void)
{
    /*创建定时器*/
    g_xTimersLedHandle  = xTimerCreate("Timer led",     20 / portTICK_RATE_MS,   pdTRUE, (void*)NULL, vSoftTimerLedCallback);
    xTimerStart(g_xTimersLedHandle, 200);

    g_xTimersKeyHandle  = xTimerCreate("Timer key",     20 / portTICK_RATE_MS,   pdTRUE, (void*)NULL, vSoftTimerKeyCallback);
    xTimerStart(g_xTimersKeyHandle, 200);

//    g_xTimersBeepHandle = xTimerCreate("Timer beep",    100 / portTICK_RATE_MS,  pdTRUE, (void*)NULL, vSoftTimerBeepCallback);
//    xTimerStart(g_xTimersBeepHandle, 200);

    return 0;
}
